import java.util.Arrays;

public class Solution1186 {
    public int maximumSum(int[] arr) {
        boolean flag=true;
        for (int i : arr) {
            if (i>=0){
                flag=false;
            }
        }
        if (flag){
            return Arrays.stream(arr).max().getAsInt();
        }
        int[] f=new int[arr.length];
        int[] g=new int[arr.length];
        f[0]=arr[0];
        if (arr[0]<0){
            g[0]=0;
        }else {
            g[0]=arr[0];
        }
        for (int i=1;i<arr.length;i++){
            f[i]=Math.max(arr[i],f[i-1]+arr[i]);
            g[i]=Math.max(g[i-1]+arr[i],f[i-1]);
            g[i]=Math.max(g[i],arr[i]);
        }
        int max=0;
        for (int i=0;i<arr.length;i++){
            max=Math.max(max,g[i]);
        }
        return max;
    }

    public static void main(String[] args) {
        System.out.println(new Solution1186().maximumSum(new int[]{1,-2,0,3}));
    }
}
